home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / parallel / philosop < prev    next >
Text File  |  1992-04-11  |  2KB  |  54 lines

  1. %---------------------------------------------------------------------
  2. %----Dining philosophers for Linda Prolog
  3. %----
  4. %----Written by Geoff Sutcliffe
  5. %---------------------------------------------------------------------
  6. dine(Number_of_philosophers,Number_of_eats,Machines):-
  7.     length(Machines,Number_of_philosophers),
  8.     First_philosopher_number is Number_of_philosophers -1,
  9.     set_table_and_philosophers(First_philosopher_number,
  10. Number_of_philosophers,Number_of_eats,Machines).
  11. %---------------------------------------------------------------------
  12. %----Supply the room tickets, chopsticks and philosophers
  13. set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats,
  14. [Machine]):-
  15.     !,
  16.     out(chopstick(0)),
  17.     eval(Machine,try_eat(0,Number_of_philosophers,Number_of_eats),
  18. philosophers).
  19.  
  20. set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
  21. Number_of_eats,[Machine|Rest_of_machines]):-
  22.     out(ticket),
  23.     out(chopstick(Philosopher_number)),
  24.     eval(Machine,try_eat(Philosopher_number,Number_of_philosophers,
  25. Number_of_eats),philosophers),
  26.     Next_philosopher_number is Philosopher_number - 1,
  27.     set_table_and_philosophers(Next_philosopher_number,
  28. Number_of_philosophers,Number_of_eats,Rest_of_machines).
  29. %---------------------------------------------------------------------
  30. try_eat(Philosopher_number,_,0):-
  31.     send_request__(write(philosopher_completed_)),
  32.     send_request__(writeln(Philosopher_number)).
  33.  
  34. try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
  35.     in(ticket),
  36.     in(chopstick(Philosopher_number)),
  37.     Next_chopstick_number is (Philosopher_number + 1) mod 
  38. Number_of_philosophers,
  39.     in(chopstick(Next_chopstick_number)),
  40.     send_request__(write(philosopher_)),
  41.     send_request__(write(Philosopher_number)),
  42.     send_request__(write(is_eating_)),
  43.     send_request__(writeln(Number_of_eats)),
  44.     out(chopstick(Philosopher_number)),
  45.     out(chopstick(Next_chopstick_number)),
  46.     out(ticket),
  47.     send_request__(write(philosopher_)),
  48.     send_request__(write(Philosopher_number)),
  49.     send_request__(writeln(is_thinking)),
  50.     New_number_of_eats is Number_of_eats - 1,
  51.     try_eat(Philosopher_number,Number_of_philosophers,
  52. New_number_of_eats).
  53. %---------------------------------------------------------------------
  54.